package service

import (
	"boy-go/modules/generator/model"
	"boy-go/modules/generator/repository"
	"boy-go/modules/generator/vo"
	"boy-go/pkg/request"
	"github.com/jinzhu/copier"
)

func NewGenTableColumnService() GenTableColumnService {
	return &genTableColumnService{
		GenTableColumnRepo: repository.NewGenTableColumnRepository(),
	}
}

type genTableColumnService struct {
	GenTableColumnRepo *repository.GenTableColumnRepository
}

// GetById 根据id获取配置信息
func (s *genTableColumnService) GetById(columnId int64) (*vo.GenTableColumnModel, error) {
	m, err := s.GenTableColumnRepo.GetById(columnId)
	if err != nil {
		return nil, err
	}
	rsp := new(vo.GenTableColumnModel)
	if err := copier.Copy(rsp, m); err != nil {
		return nil, err
	}
	return rsp, nil
}

// List 获取代码生成业务字段表列表
func (s *genTableColumnService) List(req *vo.QueryGenTableColumnReq) (*vo.ListGenTableColumnRsp, error) {

	var pageReq = &request.PageRequest{
		PageNum:  req.PageNum,
		PageSize: req.PageSize,
	}

	list, total, err := s.GenTableColumnRepo.List(req, pageReq)

	if err != nil {
		return nil, err
	}

	itemList := make([]*vo.GenTableColumnModel, 0)
	for _, v := range list {
		item := new(vo.GenTableColumnModel)
		if err := copier.Copy(item, &v); err != nil {
			continue
		}
		itemList = append(itemList, item)
	}
	return &vo.ListGenTableColumnRsp{
		List:  itemList,
		Total: total,
	}, nil
}

// Add 添加代码生成业务字段表
func (s *genTableColumnService) Add(req *vo.AddGenTableColumnReq) (*vo.AddGenTableColumnRsp, error) {
	m := new(model.GenTableColumn)
	err := copier.Copy(m, req)
	if err != nil {
		return nil, err
	}
	if err := s.GenTableColumnRepo.Save(m); err != nil {
		return nil, err
	}
	return &vo.AddGenTableColumnRsp{
		ColumnId: m.ColumnId,
	}, nil
}

// Edit 修改代码生成业务字段表
func (s *genTableColumnService) Edit(req *vo.EditGenTableColumnReq) (*vo.EditGenTableColumnRsp, error) {
	m := new(model.GenTableColumn)
	err := copier.Copy(m, req)
	if err != nil {
		return nil, err
	}
	if err := s.GenTableColumnRepo.Update(m); err != nil {
		return nil, err
	}
	return &vo.EditGenTableColumnRsp{
		ColumnId: m.ColumnId,
	}, nil
}

// Del 删除代码生成业务字段表
func (s *genTableColumnService) Del(columnId int64) error {
	return s.GenTableColumnRepo.Delete(columnId)
}

func (s *genTableColumnService) BatchDel(ids []string) error {
	return s.GenTableColumnRepo.BatchDelete(ids)
}

func (s *genTableColumnService) SelectGenTableColumnListByTableId(tableId int64) []*vo.GenTableColumnModel {
	list, _, err := s.GenTableColumnRepo.List(&vo.QueryGenTableColumnReq{
		TableId: &tableId,
	}, nil)
	if err != nil {
		return nil
	}
	itemList := make([]*vo.GenTableColumnModel, 0)
	for _, v := range list {
		item := new(vo.GenTableColumnModel)
		if err := copier.Copy(item, &v); err != nil {
			continue
		}
		itemList = append(itemList, item)
	}
	return itemList
}
